/**
 * @author Luis Antonio Lara Capetillo Fecha: 19/07/11 Descripcion: En esta
 * clase se crean los Storet Procedure para las consultas a SQL server
 * @version 1.0
 */
package RapiWeb;

import RapiWeb.Objeto.CampoBD;
import RapiWeb.Objeto.Tabla;
import RapiWeb.Objeto.Proyecto;
import Utilidades.Archivo;
import Utilidades.Utilidades;

public class Procedimiento {

    private String str_NomTabla;
    private String str_NomEsquema;
    private String str_NomProcedimiento;
    private String str_Campos0 = "";
    private String str_Campos1 = "";
    private String str_Campos2 = "";
    private String str_Campos3 = "";
    private Proyecto proyecto;
    private Archivo archivo;
    private Utilidades util;
    private Tabla tabla;
    private CampoBD[] camposBD;

    Procedimiento(Proyecto proyecto, Tabla tabla) {
        util = new Utilidades();
        this.proyecto = proyecto;
        this.tabla = tabla;
        if (tabla.getStr_NomEsquema().equals("")) {
            this.str_NomEsquema = tabla.getStr_NomEsquema();
        } else {
            this.str_NomEsquema = tabla.getStr_NomEsquema() + ".";
        }
        this.str_NomTabla = tabla.getStr_NomTabla();
        camposBD = tabla.getCamposBD();
        str_NomProcedimiento = proyecto.getStr_ProcedimientoSQL() + str_NomTabla;
        m_CrearCampos();
    }

    /**
     * Metodo para crear las distintas formas en que aparecen los campos en los
     * procedimientos almacenados
     *
     * @param campo son los todos los campos necesarios
     */
    private void m_CrearCampos() {
        String coma = ",";
        for (int i = 0; i < camposBD.length; i++) {
            if (i == camposBD.length - 1) {
                coma = "";
            }
            str_Campos0 = str_Campos0 + "\t" + camposBD[i].getStr_NomCampo() + " " + camposBD[i].getStr_Tipo() + "(" + camposBD[i].getStr_Tamaño() + ")" + coma + "\n";
            str_Campos1 = str_Campos1 + "\t" + proyecto.getStr_ParametrosSQL() + camposBD[i].getStr_NomCampo() + " " + camposBD[i].getStr_Tipo() + coma + "\n";
            str_Campos2 = str_Campos2 + camposBD[i].getStr_NomCampo() + coma;
            str_Campos3 = str_Campos3 + proyecto.getStr_ParametrosSQL() + camposBD[i].getStr_NomCampo() + coma;
        }
    }

    /**
     * Metodo para generar el archivo encargado de crear la Tabla en la base de
     * datos
     *
     * @return str_Tabla
     */
    public String m_CreaTabla() {
        String str_Tabla;
        str_Tabla = "CREATE TABLE " + str_NomTabla + "(\n"
                + str_Campos0 + ")" + "\n";
        return str_Tabla;
    }

    /**
     * Metodo para crear el procedimiento de inserta o modificar
     *
     * @return str_insertarModificar
     */
    public String m_InsertarModificar() {
        String str_insertarModificar = "";
        archivo = new Archivo();
        archivo.m_LeerArchivo("Archivos/Procedimientos/" + proyecto.getStr_Gestor() + "/InsertarModificar.sql");
        str_insertarModificar = archivo.dameContenido();
        str_insertarModificar = str_insertarModificar.replace("?Autor", proyecto.getStr_Autor());
        str_insertarModificar = str_insertarModificar.replace("?Fecha", util.dameFecha());
        str_insertarModificar = str_insertarModificar.replace("?Esquema", str_NomEsquema);
        str_insertarModificar = str_insertarModificar.replace("?NomTabla", str_NomTabla);
        str_insertarModificar = str_insertarModificar.replace("?NomProcedimiento", str_NomProcedimiento);
        str_insertarModificar = str_insertarModificar.replace("?Parametros", m_Parametros());
        str_insertarModificar = str_insertarModificar.replace("?PValues", m_ParametrosValues());
        str_insertarModificar = str_insertarModificar.replace("?CamposBaseDatos", m_CamposBaseDatos());
        str_insertarModificar = str_insertarModificar.replace("?Igualaciones", m_Igulaciones());
        str_insertarModificar = str_insertarModificar.replace("?Condicion", m_Condicion());
        System.out.println("Error: " + archivo.dameError());
        return str_insertarModificar;
    }

    /**
     * Metodo para crear el procedimiento de inserta
     *
     * @return str_insertar
     */
    public String m_Insertar() {
        String str_insertar = "";
        archivo = new Archivo();
        archivo.m_LeerArchivo("Archivos/Procedimientos/Insertar.sql");
        str_insertar = archivo.dameContenido();
        str_insertar = str_insertar.replace("?Autor", proyecto.getStr_Autor());
        str_insertar = str_insertar.replace("?Fecha", util.dameFecha());
        str_insertar = str_insertar.replace("?Esquema", str_NomEsquema);
        str_insertar = str_insertar.replace("?NomTabla", str_NomTabla);
        str_insertar = str_insertar.replace("?NomProcedimiento", str_NomProcedimiento);
        str_insertar = str_insertar.replace("?Parametros", m_Parametros());
        str_insertar = str_insertar.replace("?PValues", m_ParametrosValues());
        str_insertar = str_insertar.replace("?CamposBaseDatos", m_CamposBaseDatos());
        System.out.println("Error: " + archivo.dameError());
        return str_insertar;
    }

    /**
     * metodo para crear el procedimiento de modificar
     *
     * @return str_Modificar
     */
    public String m_Modificar() {
        String str_Modificar = "";
        archivo = new Archivo();
        archivo.m_LeerArchivo("Archivos/Procedimientos/Modificar.sql");
        str_Modificar = archivo.dameContenido();
        str_Modificar = str_Modificar.replace("?Autor", proyecto.getStr_Autor());
        str_Modificar = str_Modificar.replace("?Fecha", util.dameFecha());
        str_Modificar = str_Modificar.replace("?Esquema", str_NomEsquema);
        str_Modificar = str_Modificar.replace("?NomTabla", str_NomTabla);
        str_Modificar = str_Modificar.replace("?Parametros", m_Parametros());
        str_Modificar = str_Modificar.replace("?NomProcedimiento", str_NomProcedimiento);
        str_Modificar = str_Modificar.replace("?Igualaciones", m_Igulaciones());
        str_Modificar = str_Modificar.replace("?Condicion", m_Condicion());
        return str_Modificar;
    }

    /**
     * Metodo para crear el procedimiento de borrar
     *
     * @return
     */
    public String m_Borrar() {
        String str_Borrar = "";
        archivo = new Archivo();
        archivo.m_LeerArchivo("Archivos/Procedimientos/Borrar.sql");
        str_Borrar = archivo.dameContenido();
        str_Borrar = str_Borrar.replace("?Autor", proyecto.getStr_Autor());
        str_Borrar = str_Borrar.replace("?Fecha", util.dameFecha());
        str_Borrar = str_Borrar.replace("?Esquema", str_NomEsquema);
        str_Borrar = str_Borrar.replace("?NomTabla", str_NomTabla);
        str_Borrar = str_Borrar.replace("?NomProcedimiento", str_NomProcedimiento);
        str_Borrar = str_Borrar.replace("?Condicion", m_Condicion());
        return str_Borrar;
    }

    /**
     * metodo para crear el procedimiento de consultar
     *
     * @return str_Consultar
     */
    public String m_Consultar() {
        String str_Consultar = "";
        archivo = new Archivo();
        archivo.m_LeerArchivo("Archivos/Procedimientos/Consultar.sql");
        str_Consultar = archivo.dameContenido();
        str_Consultar = str_Consultar.replace("?Autor", proyecto.getStr_Autor());
        str_Consultar = str_Consultar.replace("?Fecha", util.dameFecha());
        str_Consultar = str_Consultar.replace("?Esquema", str_NomEsquema);
        str_Consultar = str_Consultar.replace("?NomTabla", str_NomTabla);
        str_Consultar = str_Consultar.replace("?NomProcedimiento", str_NomProcedimiento);
        str_Consultar = str_Consultar.replace("?Parametros", "pNidDocumento NUMBER");
        str_Consultar = str_Consultar.replace("?CamposBaseDatos", m_CamposBaseDatos());
        str_Consultar = str_Consultar.replace("?Condicion", "nidDocumento=pNidDocumento");
        return str_Consultar;
    }

    /**
     * Metodo para generar el procedimiento de DetalleXML
     *
     * @return
     */
    public String m_DetalleXML() {
        String str_DetalleXML = "";
        archivo = new Archivo();
        archivo.m_LeerArchivo("Archivos/Procedimientos/Detalle.sql");
        str_DetalleXML = archivo.dameContenido();
        str_DetalleXML = str_DetalleXML.replace("?Autor", proyecto.getStr_Autor());
        str_DetalleXML = str_DetalleXML.replace("?Fecha", util.dameFecha());
        str_DetalleXML = str_DetalleXML.replace("?Esquema", str_NomEsquema);
        str_DetalleXML = str_DetalleXML.replace("?NomTabla", str_NomTabla);
        str_DetalleXML = str_DetalleXML.replace("?NomProcedimiento", str_NomProcedimiento);
        str_DetalleXML = str_DetalleXML.replace("?Parametros", "pNidDocumento NUMBER");
        str_DetalleXML = str_DetalleXML.replace("?CamposBaseDatos", m_CamposBaseDatos());
        str_DetalleXML = str_DetalleXML.replace("?Condicion", "nidDocumento=pNidDocumento");
        return str_DetalleXML;
    }

    /**
     * Metodo para generar el procedimiento de DetalleXML pero sin el curso de
     * archivos Anexos
     *
     * @return
     */
    public String m_DetalleXMLsinAnexo() {
        String str_DetalleXML = "";
        archivo = new Archivo();
        archivo.m_LeerArchivo("Archivos/Procedimientos/DetalleSinAnexo.sql");
        str_DetalleXML = archivo.dameContenido();
        str_DetalleXML = str_DetalleXML.replace("?Autor", proyecto.getStr_Autor());
        str_DetalleXML = str_DetalleXML.replace("?Fecha", util.dameFecha());
        str_DetalleXML = str_DetalleXML.replace("?Esquema", str_NomEsquema);
        str_DetalleXML = str_DetalleXML.replace("?NomTabla", str_NomTabla);
        str_DetalleXML = str_DetalleXML.replace("?NomProcedimiento", str_NomProcedimiento);
        str_DetalleXML = str_DetalleXML.replace("?Parametros", "pNidDocumento NUMBER");
        str_DetalleXML = str_DetalleXML.replace("?CamposBaseDatos", m_CamposBaseDatos());
        str_DetalleXML = str_DetalleXML.replace("?Condicion", "nidDocumento=pNidDocumento");
        return str_DetalleXML;
    }

    /**
     * Metodo para generar el archivo encargado de crear un procedimiento
     * almacenado llamado combo
     *
     * @return str_Combo
     */
    public String m_Combo() {
        String str_Combo;
        archivo = new Archivo();
        archivo.m_LeerArchivo("Archivos/Procedimientos/Combo.sql");
        str_Combo = archivo.dameContenido();
        str_Combo = str_Combo.replace("?Autor", proyecto.getStr_Autor());
        str_Combo = str_Combo.replace("?Fecha", util.dameFecha());
        str_Combo = str_Combo.replace("?Esquema", str_NomEsquema);
        str_Combo = str_Combo.replace("?NomTabla", str_NomTabla);
        str_Combo = str_Combo.replace("?NomProcedimiento", str_NomProcedimiento);
        str_Combo = str_Combo.replace("?Parametros", "pNidDocumento NUMBER");
        str_Combo = str_Combo.replace("?CamposBaseDatos", m_CamposBaseDatos());
        str_Combo = str_Combo.replace("?Condicion", "nidDocumento=pNidDocumento");
        return str_Combo;
    }

    /**
     * Metodo para crear el procedimiento de combo por nombre
     *
     * @return str_Combo
     */
    public String m_ComboPorNombre() {
        String str_Combo;
        archivo = new Archivo();
        archivo.m_LeerArchivo("Archivos/Procedimientos/ComboPorNombre.sql");
        str_Combo = archivo.dameContenido();
        str_Combo = str_Combo.replace("?Autor", proyecto.getStr_Autor());
        str_Combo = str_Combo.replace("?Fecha", util.dameFecha());
        str_Combo = str_Combo.replace("?Esquema", str_NomEsquema);
        str_Combo = str_Combo.replace("?NomTabla", str_NomTabla);
        str_Combo = str_Combo.replace("?NomProcedimiento", str_NomProcedimiento);
        str_Combo = str_Combo.replace("?CamposBaseDatos", m_CamposBaseDatos());
        str_Combo = str_Combo.replace("?Condicion", "nombre=pNombre");
        return str_Combo;
    }

    /**
     * Metodo para obtener la procedimiento de integracion
     * @return str_Integracion
     */
    public String m_Integracion() {
        String str_Integracion;
        archivo = new Archivo();
        archivo.m_LeerArchivo("Archivos/Procedimientos/Integracion.sql");
        str_Integracion = archivo.dameContenido();
        str_Integracion = str_Integracion.replace("?Autor", proyecto.getStr_Autor());
        str_Integracion = str_Integracion.replace("?Fecha", util.dameFecha());
        str_Integracion = str_Integracion.replace("?Esquema", str_NomEsquema);
        str_Integracion = str_Integracion.replace("?NomTabla", str_NomTabla);
//        str_Integracion = str_Integracion.replace("?ContenidoPaquete", "");
        return str_Integracion;
    }

    /**
     * Metodo para obtener el Trigger de insercion
     * @return str_Trigger
     */
    public String m_TriggerInsert() {
        String str_Trigger = "";
        archivo = new Archivo();
        archivo.m_LeerArchivo("Archivos/Procedimientos/TriggerInsert.sql");
        str_Trigger = archivo.dameContenido();
        str_Trigger = str_Trigger.replace("?Autor", proyecto.getStr_Autor());
        str_Trigger = str_Trigger.replace("?Fecha", util.dameFecha());
        str_Trigger = str_Trigger.replace("?Esquema", str_NomEsquema);
        str_Trigger = str_Trigger.replace("?NomTabla", str_NomTabla);
        str_Trigger = str_Trigger.replace("?CamposBaseDatos", m_CamposBaseDatosTrigger());
        str_Trigger = str_Trigger.replace("?Declare", m_DeclareTrigger(0));
        str_Trigger = str_Trigger.replace("?Variables", m_VariablesTrigger(0));
        str_Trigger = str_Trigger.replace("?Accion", m_AccionTrigger());

        return str_Trigger;
    }

    /**
     * Metodo para obtener el Trigger de Actualizacion
     * @return 
     */
    public String m_TriggerUpdate() {
        String str_Trigger = "";
        archivo = new Archivo();
        archivo.m_LeerArchivo("Archivos/Procedimientos/TriggerUpdate.sql");
        str_Trigger = archivo.dameContenido();
        str_Trigger = str_Trigger.replace("?Autor", proyecto.getStr_Autor());
        str_Trigger = str_Trigger.replace("?Fecha", util.dameFecha());
        str_Trigger = str_Trigger.replace("?Esquema", str_NomEsquema);
        str_Trigger = str_Trigger.replace("?NomTabla", str_NomTabla);
        str_Trigger = str_Trigger.replace("?CamposBaseDatos", m_CamposBaseDatosTrigger());
        str_Trigger = str_Trigger.replace("?DeclareAnt", m_DeclareTrigger(1));
        str_Trigger = str_Trigger.replace("?DeclareNuevo", m_DeclareTrigger(2));
        str_Trigger = str_Trigger.replace("?VariablesAnt", m_VariablesTrigger(1));
        str_Trigger = str_Trigger.replace("?VariablesNuevo", m_VariablesTrigger(2));
        str_Trigger = str_Trigger.replace("?Condiciones", m_CondicionesTrigger());

        return str_Trigger;
    }

    /**
     * Metodo para crear una sequencia de la tabla
     *
     * @return
     */
    public String m_Sequencia() {
        String str_Sequencia;
        archivo = new Archivo();
        archivo.m_LeerArchivo("Archivos/Procedimientos/sequence.sql");
        str_Sequencia = archivo.dameContenido();
        str_Sequencia = str_Sequencia.replace("?NomTabla", str_NomTabla);
        return str_Sequencia;
    }

    /**
     * Metodo para crear la parte de especificacion del paquete
     *
     * @return
     */
    public String m_PaqueteSpec() {
        String str_Combo;
        archivo = new Archivo();
        archivo.m_LeerArchivo("Archivos/Procedimientos/Paquete Spec.sql");
        str_Combo = archivo.dameContenido();
        str_Combo = str_Combo.replace("?Autor", proyecto.getStr_Autor());
        str_Combo = str_Combo.replace("?Fecha", util.dameFecha());
        str_Combo = str_Combo.replace("?Esquema", str_NomEsquema);
        str_Combo = str_Combo.replace("?NomTabla", str_NomTabla);
        str_Combo = str_Combo.replace("?NomProcedimiento", str_NomProcedimiento);
        str_Combo = str_Combo.replace("?Parametros", m_Parametros());
        return str_Combo;
    }

    /**
     * Metodo para crear la parte de especificacion del paquete
     *
     * @return
     */
    public String m_PaqueteBody() {
        String str_Combo;
        archivo = new Archivo();
        archivo.m_LeerArchivo("Archivos/Procedimientos/Paquete Body.sql");
        str_Combo = archivo.dameContenido();
        str_Combo = str_Combo.replace("?Autor", proyecto.getStr_Autor());
        str_Combo = str_Combo.replace("?Fecha", util.dameFecha());
        str_Combo = str_Combo.replace("?Esquema", str_NomEsquema);
        str_Combo = str_Combo.replace("?NomTabla", str_NomTabla);
        str_Combo = str_Combo.replace("?NomProcedimiento", str_NomProcedimiento);
        str_Combo = str_Combo.replace("?Parametros", m_Parametros());
        str_Combo = str_Combo.replace("?PValues", m_ParametrosValues());
        str_Combo = str_Combo.replace("?CamposBaseDatos", m_CamposBaseDatos());
        str_Combo = str_Combo.replace("?Igualaciones", m_Igulaciones());
        str_Combo = str_Combo.replace("?Condicion", m_Condicion());
        return str_Combo;
    }

    /**
     * Metodo para obtener los parametros del procedimiento
     *
     * @return str_Parametros
     */
    private String m_Parametros() {
        String str_Parametros = "";
        if (proyecto.getStr_Gestor().equals("Oracle")) {
            for (int i = 1; i < camposBD.length; i++) {
                int num = i;
                String tipo = camposBD[i].getStr_Tipo();
                String pCampo = proyecto.getStr_ParametrosSQL() + camposBD[i].getStr_NomCampo();
                if (camposBD[i].getStr_Tipo().equals("DATE") || camposBD[i].getStr_Tipo().equals("TIMESTAMP")) {
                    str_Parametros += pCampo + " " + "VARCHAR2";
                } else {
                    str_Parametros += pCampo + " " + tipo;
                }
                if (num % 3 == 0 & num > 0) {
                    str_Parametros += ", \n\t\t\t\t\t\t\t\t";
                } else {
                    str_Parametros += ", ";
                }
            }
        } else {
            for (int i = 1; i < camposBD.length; i++) {
                int num = i;
                String tipo = camposBD[i].getStr_Tipo();
                String pCampo = "@" + proyecto.getStr_ParametrosSQL() + camposBD[i].getStr_NomCampo();
                if (camposBD[i].getStr_Tipo().equals("DATE") || camposBD[i].getStr_Tipo().equals("TIMESTAMP")) {
                    str_Parametros += pCampo + " " + "VARCHAR2";
                } else if (camposBD[i].getStr_Tipo().equals("VARCHAR")) {
                    str_Parametros += pCampo + " " + tipo + "(" + camposBD[i].getStr_Tamaño() + ")";
                } else {
                    str_Parametros += pCampo + " " + tipo;
                }
                if (num % 3 == 0 & num > 0) {
                    str_Parametros += ", \n\t\t\t\t\t\t\t\t";
                } else {
                    str_Parametros += ", ";
                }
            }
        }

        return str_Parametros;
    }

    /**
     * Metodo para obtener las variables del trigger
     *
     * @param int_Tipo (0)normal (1)Antes (2)Nuevo
     * @return str_Variables
     */
    private String m_DeclareTrigger(int int_Tipo) {
        String str_Variables = "";
        if (proyecto.getStr_Gestor().equals("Oracle")) {
            for (int i = 0; i < camposBD.length; i++) {
                int num = i;
                String tipo = camposBD[i].getStr_Tipo();
                String nomCampo = "" + camposBD[i].getStr_NomCampo().charAt(0);
                nomCampo = nomCampo.toUpperCase() + camposBD[i].getStr_NomCampo().substring(1);
                String pCampo = proyecto.getStr_VariableSQL() + nomCampo;
                switch (int_Tipo) {
                    case 1:
                        pCampo = pCampo + "Ant";
                        break;
                    case 2:
                        pCampo = pCampo + "Nuevo";
                        break;
                }
                str_Variables += pCampo + " " + tipo;
                if (num % 3 == 0 & num > 0) {
                    str_Variables += ", \n\t\t\t";
                } else {
                    str_Variables += ", ";
                }
            }
        } else {
            for (int i = 0; i < camposBD.length; i++) {
                int num = i;
                String tipo = camposBD[i].getStr_Tipo();
                String nomCampo = "" + camposBD[i].getStr_NomCampo().charAt(0);
                nomCampo = nomCampo.toUpperCase() + camposBD[i].getStr_NomCampo().substring(1);
                String pCampo = "@" + proyecto.getStr_VariableSQL() + nomCampo;
                switch (int_Tipo) {
                    case 1:
                        pCampo = pCampo + "Ant";
                        break;
                    case 2:
                        pCampo = pCampo + "Nuevo";
                        break;
                }
                if (camposBD[i].getStr_Tipo().equals("VARCHAR")) {
                    str_Variables += pCampo + " " + tipo + "(" + camposBD[i].getStr_Tamaño() + ")";
                } else {
                    str_Variables += pCampo + " " + tipo;
                }
                if (num % 3 == 0 & num > 0) {
                    str_Variables += ", \n\t\t\t";
                } else {
                    str_Variables += ", ";
                }
            }
        }

        return str_Variables;
    }

    /**
     * Metodo para las variables del trigger
     * @param int_Tipo (0)normal (1)Antes (2)Nuevo
     * @return str_Variables
     */
    private String m_VariablesTrigger(int int_Tipo) {
        String str_Variables = "";
        if (proyecto.getStr_Gestor().equals("Oracle")) {
            for (int i = 0; i < camposBD.length; i++) {
                int num = i;
                String nomCampo = "" + camposBD[i].getStr_NomCampo().charAt(0);
                nomCampo = nomCampo.toUpperCase() + camposBD[i].getStr_NomCampo().substring(1);
                String pCampo = proyecto.getStr_VariableSQL() + nomCampo;
                switch (int_Tipo) {
                    case 1:
                        pCampo = pCampo + "Ant";
                        break;
                    case 2:
                        pCampo = pCampo + "Nuevo";
                        break;
                }
                str_Variables += pCampo;
                if (num % 3 == 0 & num > 0) {
                    str_Variables += ", \n\t\t\t";
                } else {
                    str_Variables += ", ";
                }
            }
        } else {
            for (int i = 0; i < camposBD.length; i++) {
                int num = i;
                String nomCampo = "" + camposBD[i].getStr_NomCampo().charAt(0);
                nomCampo = nomCampo.toUpperCase() + camposBD[i].getStr_NomCampo().substring(1);
                String pCampo = "@" + proyecto.getStr_VariableSQL() + nomCampo;
                switch (int_Tipo) {
                    case 1:
                        pCampo = pCampo + "Ant";
                        break;
                    case 2:
                        pCampo = pCampo + "Nuevo";
                        break;
                }
                str_Variables += pCampo;
                if (num % 3 == 0 & num > 0) {
                    str_Variables += ", \n\t\t\t";
                } else {
                    str_Variables += ", ";
                }
            }
        }

        return str_Variables;
    }

    /**
     * metodo para obtener los parametros para Values
     *
     * @return
     */
    private String m_ParametrosValues() {
        String str_ParametrosValues = "";
        String str_Arroba = "";
        if (proyecto.getStr_Gestor().equals("SQLServer")) {
            str_Arroba = "@";
        }
        for (int i = 1; i < camposBD.length; i++) {
            int num = i + 1;
            if (camposBD[i].getStr_Tipo().equals("DATE") || camposBD[i].getStr_Tipo().equals("TIMESTAMP")) {
                str_ParametrosValues += "to_date(" + proyecto.getStr_ParametrosSQL() + camposBD[i].getStr_NomCampo() + ",'DD/MM/YYYY HH24:MI:SS')";
            } else {
                str_ParametrosValues += str_Arroba + proyecto.getStr_ParametrosSQL() + camposBD[i].getStr_NomCampo();
            }
            if (i == camposBD.length - 1) {
                str_ParametrosValues += "";
            } else if (num % 3 == 0) {
                str_ParametrosValues += ", \n\t\t\t\t";
            } else {
                str_ParametrosValues += ", ";
            }
        }

        return str_ParametrosValues;
    }

    /**
     * Metodo para obtener los campos de la base de datos
     *
     * @return str_CamposBD
     */
    private String m_CamposBaseDatos() {
        String str_CamposBD = "";
        for (int i = 0; i < camposBD.length; i++) {
            int num = i + 1;
            if (i == camposBD.length - 1) {
                str_CamposBD += camposBD[i].getStr_NomCampo();
            } else if (num % 3 == 0 && i > 0) {
                str_CamposBD += camposBD[i].getStr_NomCampo() + ", \n\t\t\t\t";
            } else {
                str_CamposBD += camposBD[i].getStr_NomCampo() + ", ";
            }
        }
        return str_CamposBD;
    }

    /**
     * Metodo para obtener los campos de la base de datos de para el trigger
     *
     * @return str_CamposBD
     */
    private String m_CamposBaseDatosTrigger() {
        String str_CamposBD = "";
        for (int i = 0; i < camposBD.length; i++) {
            int num = i + 1;
            String campo = camposBD[i].getStr_NomCampo();
            if ("SI".equals(camposBD[i].getStr_Nulo())) {
                if (camposBD[i].getStr_Tipo().equals("VARCHAR")) {
                    campo = "ISNULL(" + camposBD[i].getStr_NomCampo() + ",'n/a')";
                } else if (camposBD[i].getStr_Tipo().equals("INT")) {
                    campo = "ISNULL(" + camposBD[i].getStr_NomCampo() + ",0)";
                }
            }

            if (i == camposBD.length - 1) {
                str_CamposBD += campo;
            } else if (num % 3 == 0 && i > 0) {
                str_CamposBD += campo + ", \n\t\t\t\t\t\t";
            } else {
                str_CamposBD += campo + ", ";
            }
        }
        return str_CamposBD;
    }

    /**
     * Metodo para obtener las igualaciones de procedimiento de modificar
     *
     * @return str_Igualaciones
     */
    private String m_Igulaciones() {
        String str_Igualaciones = "";
        String coma = ", ";
        String str_Arroba = "";
        if (proyecto.getStr_Gestor().equals("SQLServer")) {
            str_Arroba = "@";
        }
        for (int i = 1; i < camposBD.length; i++) {
            String pCampo = str_Arroba + proyecto.getStr_ParametrosSQL() + camposBD[i].getStr_NomCampo();
            String campo = camposBD[i].getStr_NomCampo();
            if (i % 3 == 0 && i > 0) {
                str_Igualaciones += "\n\t\t\t";
            }
            if (i == camposBD.length - 1) {
                coma = "";
            }
            if (camposBD[i].getStr_Tipo().equals("DATE") || camposBD[i].getStr_Tipo().equals("TIMESTAMP")) {
                str_Igualaciones += campo + "=" + "to_date(" + pCampo + ",'DD/MM/YYYY HH24:MI:SS')" + coma;
            } else {
                str_Igualaciones += campo + "=" + pCampo + coma;
            }
        }
        return str_Igualaciones;
    }

    /**
     * Metodo para obtener las consiciones para el procedimiento
     *
     * @return str_Condiciones
     */
    private String m_Condicion() {
        String pCampo = proyecto.getStr_ParametrosSQL() + camposBD[0].getStr_NomCampo();
        String campo = camposBD[0].getStr_NomCampo();
        String str_Condiciones;
        if (proyecto.getStr_Gestor().equals("Oracle")) {
            str_Condiciones = campo + "=" + pCampo;
        } else {
            str_Condiciones = campo + "=@" + pCampo;
        }
        return str_Condiciones;
    }

    /**
     * Metodo para obtener las condiciones del trigger
     * @return str_Condiciones
     */
    private String m_CondicionesTrigger() {
        String str_Condiciones = "";
        archivo = new Archivo();
        archivo.m_LeerArchivo("Archivos/Procedimientos/Trigger_Condicion.sql");
        String condicion = archivo.dameContenido();
        archivo.m_LeerArchivo("Archivos/Procedimientos/Trigger_Condicion2.sql");
        String condicion2 = archivo.dameContenido();
        String str_CampoCondicion="";
        for (CampoBD campo : camposBD) {
            if(campo.getStr_Tipo().equals("VARCHAR") || campo.getStr_Tipo().equals("NVARCHAR")){
                str_CampoCondicion = condicion;
            }else{
                str_CampoCondicion = condicion2;
            }
            String nomCampo = "" + campo.getStr_NomCampo().charAt(0);
            nomCampo = nomCampo.toUpperCase() + campo.getStr_NomCampo().substring(1);
            
            str_CampoCondicion = str_CampoCondicion.replace("?NomCampo", nomCampo);
            str_Condiciones = str_Condiciones + str_CampoCondicion;
        }
        return str_Condiciones;
    }

    /**
     * Metodo para obtener la accion del trigger
     * @return str_Accion
     */
    private String m_AccionTrigger() {
        String str_Accion = "";
        for (CampoBD campo : camposBD) {
            String nomCampo = "" + campo.getStr_NomCampo().charAt(0);
            nomCampo = nomCampo.toUpperCase() + campo.getStr_NomCampo().substring(1);
            if(campo.getStr_Tipo().equals("INT")){
                str_Accion = str_Accion + "'" + nomCampo + "=' + CONVERT(VARCHAR,@" + proyecto.getStr_VariableSQL() + nomCampo + ")+'; '+";
            }else{
                str_Accion = str_Accion + "'" + nomCampo + "='+@" + proyecto.getStr_VariableSQL() + nomCampo + "+'; '+";
            }
        }
        str_Accion = str_Accion.substring(0, str_Accion.length() - 6);
        return str_Accion;
    }

}
